/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package view.kasse;

import control.KasseController;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.text.ParseException;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import utility.DoubleRestrictionDocument;
import utility.ImageToolbox;
import utility.PriceFormater;
import view.MainGUI;
import view.touchability.SkærmNumpad;

/**
 *
 * @author Jeppe
 */
public class KasseBeholdningsPanel extends javax.swing.JPanel {

    private final MainGUI mainGUI;
    /**
     * Bestemmer om panelet skal fungere som start- eller slut-beholdningsPanel
     */
    private boolean startBeholdning;

    /**
     * Creates new form KasseBeholdningsPanel
     * @param mainGUI
     */
    public KasseBeholdningsPanel(MainGUI mainGUI) {
        initComponents();
        this.mainGUI = mainGUI;
    }

    public void setStartBeholdning(boolean startBeholdning) {
        this.startBeholdning = startBeholdning;
        if (startBeholdning) {
            kommandoLabel.setText("Indtast startBeholdning");
        } else {
            kommandoLabel.setText("Indtast slutbeholdning");
        }
    }
    
    public void setScreenShotLabel(ImageIcon imgIcon){
        screenShotLabel.setIcon(imgIcon);
    }

    /**
     * Metoden tjekker om de indtastede data kun består af tal, disse tal
     * formateres til int og sættes derefter som startbeholdning i et nyt
     * kasseobjekt eller som slutbeholdning i et kasseobjekt.
     *
     * @param evt
     */
    private void validér(KeyEvent evt) {
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            if (startBeholdning) {
                if ((jTextField1_DKKbeholdning.getText().matches("\\d+")) && jTextField2_EUROBeholdning.getText().matches("\\d+")) {
                    int startDKK = PriceFormater.formaterPrisTilInt(jTextField1_DKKbeholdning.getText());
                    int startEURO = PriceFormater.formaterPrisTilInt(jTextField2_EUROBeholdning.getText());

                    try {
                        KasseController.getInstance().opretNyKasseForIdag(startDKK, startEURO);
                        setVisible(false);
                        mainGUI.showPage("KassePanel");
                    } catch (SQLException ex) {
                        jLabel_Fejlbesked.setVisible(true);
                        jLabel_Fejlbesked.setText("Fejl i indtastning");
                        JOptionPane.showMessageDialog(this, "Fejl 1011 \nFejl ved indsættelse af ny kasse i databasen.\n" + ex.getLocalizedMessage(), "Databasefejl", 0);
                    } catch (ParseException ex) {
                        JOptionPane.showMessageDialog(this, "Fejl 1025 \nFejl ved formatering af dato. \n" + ex.getLocalizedMessage(), "Fejl", 0);
                    }
                } else {
                    jLabel_Fejlbesked.setVisible(true);
                    jLabel_Fejlbesked.setText("Indtast beløb");
                }
            } else {
                if ((jTextField1_DKKbeholdning.getText().matches("\\d+")) && jTextField2_EUROBeholdning.getText().matches("\\d+")) {
                    int slutDKK = PriceFormater.formaterPrisTilInt(jTextField1_DKKbeholdning.getText());
                    int slutEURO = PriceFormater.formaterPrisTilInt(jTextField2_EUROBeholdning.getText());

                    try {
                        KasseController.getInstance().lukKasse(slutDKK, slutEURO);
                        setVisible(false);
                        mainGUI.showPage("KasseRapportPanel");
                    } catch (SQLException ex) {
                        jLabel_Fejlbesked.setVisible(true);
                        jLabel_Fejlbesked.setText("Fejl i indtastning");
                        JOptionPane.showMessageDialog(this, "Fejl 1012 \nFejl ved lukning af kasse i databasen.\n" + ex.getLocalizedMessage(), "Databasefejl", 0);
                    }
                } else {
                    jLabel_Fejlbesked.setVisible(true);
                    jLabel_Fejlbesked.setText("Indtast beløb");
                }
            }
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        okKnap = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jTextField1_DKKbeholdning = new javax.swing.JTextField();
        jTextField2_EUROBeholdning = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        kommandoLabel = new javax.swing.JLabel();
        jLabel_Fejlbesked = new javax.swing.JLabel();
        jButton2 = new javax.swing.JButton();
        baggrundLabel = new javax.swing.JLabel(){
            public void paint(Graphics g){
                ImageToolbox.drawImage(g, (ImageIcon)baggrundLabel.getIcon(), 0, 0, baggrundLabel.getWidth(), baggrundLabel.getHeight());
            }
        };
        baggrundOverlayLabel = new javax.swing.JLabel();
        screenShotLabel = new javax.swing.JLabel(){
            public void paint(Graphics g){
                ImageToolbox.drawImage(g, (ImageIcon)screenShotLabel.getIcon(), 0, 0, screenShotLabel.getWidth(), screenShotLabel.getHeight());
            }
        };

        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentHidden(java.awt.event.ComponentEvent evt) {
                formComponentHidden(evt);
            }
            public void componentShown(java.awt.event.ComponentEvent evt) {
                formComponentShown(evt);
            }
        });
        setLayout(null);

        jPanel1.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0), 2));
        jPanel1.setOpaque(false);
        jPanel1.setLayout(null);

        okKnap.setText("OK");
        okKnap.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                okKnapActionPerformed(evt);
            }
        });
        jPanel1.add(okKnap);
        okKnap.setBounds(170, 210, 100, 40);

        jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel2.setOpaque(false);
        jPanel2.setLayout(null);

        jTextField1_DKKbeholdning.setDocument(new DoubleRestrictionDocument(6, jTextField1_DKKbeholdning));
        jTextField1_DKKbeholdning.setText("1000");
        jTextField1_DKKbeholdning.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField1_DKKbeholdningKeyReleased(evt);
            }
        });
        jPanel2.add(jTextField1_DKKbeholdning);
        jTextField1_DKKbeholdning.setBounds(110, 50, 70, 30);

        jTextField2_EUROBeholdning.setText("200");
        jTextField2_EUROBeholdning.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextField2_EUROBeholdningKeyReleased(evt);
            }
        });
        jPanel2.add(jTextField2_EUROBeholdning);
        jTextField2_EUROBeholdning.setBounds(110, 90, 70, 30);

        jLabel1.setText("DKK");
        jPanel2.add(jLabel1);
        jLabel1.setBounds(60, 55, 50, 20);

        jLabel2.setText("EURO");
        jPanel2.add(jLabel2);
        jLabel2.setBounds(60, 95, 50, 20);

        kommandoLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        kommandoLabel.setText("Indtast startbeholdning:");
        jPanel2.add(kommandoLabel);
        kommandoLabel.setBounds(10, 0, 195, 31);

        jPanel1.add(jPanel2);
        jPanel2.setBounds(40, 50, 230, 150);

        jLabel_Fejlbesked.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel_Fejlbesked.setForeground(new java.awt.Color(255, 0, 0));
        jPanel1.add(jLabel_Fejlbesked);
        jLabel_Fejlbesked.setBounds(114, 180, 80, 20);

        jButton2.setText("Tilbage");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton2);
        jButton2.setBounds(40, 210, 100, 40);

        baggrundLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/baggrundOverlay.png"))); // NOI18N
        jPanel1.add(baggrundLabel);
        baggrundLabel.setBounds(3, 3, 304, 270);

        add(jPanel1);
        jPanel1.setBounds(80, 97, 310, 276);

        baggrundOverlayLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/baggrundOverlay.png"))); // NOI18N
        add(baggrundOverlayLabel);
        baggrundOverlayLabel.setBounds(0, 0, 800, 610);
        add(screenShotLabel);
        screenShotLabel.setBounds(0, 0, 800, 610);
    }// </editor-fold>//GEN-END:initComponents

    private void okKnapActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okKnapActionPerformed
        if (startBeholdning) {
            if ((jTextField1_DKKbeholdning.getText().matches("\\d+")) && jTextField2_EUROBeholdning.getText().matches("\\d+")) {
                int startDKK = PriceFormater.formaterPrisTilInt(jTextField1_DKKbeholdning.getText());
                int startEURO = PriceFormater.formaterPrisTilInt(jTextField2_EUROBeholdning.getText());

                try {
                    KasseController.getInstance().opretNyKasseForIdag(startDKK, startEURO);
                    setVisible(false);
                    mainGUI.showPage("KassePanel");
                } catch (SQLException ex) {
                    jLabel_Fejlbesked.setVisible(true);
                    jLabel_Fejlbesked.setText("Fejl i indtastning");
                    JOptionPane.showMessageDialog(this, "Fejl 1011 \nFejl ved indsættelse af ny kasse i databasen.\n" + ex.getLocalizedMessage(), "Databasefejl", 0);
                } catch (ParseException ex) {
                    JOptionPane.showMessageDialog(this, "Fejl 1025 \nFejl ved formatering af dato. \n" + ex.getLocalizedMessage(), "Fejl", 0);
                }
            } else {
                jLabel_Fejlbesked.setVisible(true);
                jLabel_Fejlbesked.setText("Indtast beløb");
            }
        } else {
            if ((jTextField1_DKKbeholdning.getText().matches("\\d+")) && jTextField2_EUROBeholdning.getText().matches("\\d+")) {
                int slutDKK = PriceFormater.formaterPrisTilInt(jTextField1_DKKbeholdning.getText());
                int slutEURO = PriceFormater.formaterPrisTilInt(jTextField2_EUROBeholdning.getText());

                try {
                    KasseController.getInstance().lukKasse(slutDKK, slutEURO);
                    setVisible(false);
                    mainGUI.showPage("KasseRapportPanel");
                } catch (SQLException ex) {
                    jLabel_Fejlbesked.setVisible(true);
                    jLabel_Fejlbesked.setText("Fejl i indtastning");
                    JOptionPane.showMessageDialog(this, "Fejl 1012 \nFejl ved lukning af kasse i databasen.\n" + ex.getLocalizedMessage(), "Databasefejl", 0);
                }
            } else {
                jLabel_Fejlbesked.setVisible(true);
                jLabel_Fejlbesked.setText("Indtast beløb");
            }
        }
    }//GEN-LAST:event_okKnapActionPerformed

    private void jTextField1_DKKbeholdningKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField1_DKKbeholdningKeyReleased
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            jTextField2_EUROBeholdning.requestFocus();
            jTextField2_EUROBeholdning.selectAll();
        }
    }//GEN-LAST:event_jTextField1_DKKbeholdningKeyReleased

    private void jTextField2_EUROBeholdningKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextField2_EUROBeholdningKeyReleased
        validér(evt);
    }//GEN-LAST:event_jTextField2_EUROBeholdningKeyReleased

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
        if (startBeholdning) {
            mainGUI.showPage("MenuPanel");
        } else {
            mainGUI.showPage("KassePanel");
        }
    }//GEN-LAST:event_jButton2ActionPerformed

    private void formComponentShown(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentShown
        SkærmNumpad.getInstance().setVisible(true);
        jTextField1_DKKbeholdning.requestFocus();
        jTextField1_DKKbeholdning.selectAll();
    }//GEN-LAST:event_formComponentShown

    private void formComponentHidden(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentHidden
        SkærmNumpad.getInstance().setVisible(false);
    }//GEN-LAST:event_formComponentHidden


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel baggrundLabel;
    private javax.swing.JLabel baggrundOverlayLabel;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel_Fejlbesked;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JTextField jTextField1_DKKbeholdning;
    private javax.swing.JTextField jTextField2_EUROBeholdning;
    private javax.swing.JLabel kommandoLabel;
    private javax.swing.JButton okKnap;
    private javax.swing.JLabel screenShotLabel;
    // End of variables declaration//GEN-END:variables
}
